package com.chandon.T04_stream;

import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Stream;

/**
 * 描述
 *
 * @author Dong
 * @version 1.0
 * @date 2021-04-18 22:59
 */

public class T02_StreamTest {
    public static void main(String[] args) {

//        filterCollectTest();
//        limitSkipTest();
//        foreachTest();

//        mapTest();
        a();
    }




    /*
        7个元素黄药师，冯蘅，郭靖，黄蓉，郭芙，郭襄，郭破虏，使用Stream将以郭字开头的元素存入新数组
     */
    public static void filterCollectTest() {

        String[] names = {"黄药师", "冯蘅", "郭靖", "黄蓉", "郭芙", "郭襄", "郭破虏"};
        Stream<String> nameStream = Arrays.stream(names);
        Object[] array = nameStream.filter(s -> s.startsWith("郭")).toArray();
        System.out.println(Arrays.toString(array));

    }

    /*
        已知ArrayList集合中有如下元素{陈玄风、梅超风、陆乘风、曲灵风、武眠风、冯默风、罗玉风}，使用Stream
        1、取出前2个元素并在控制台打印输出。
        2、取出后2个元素并在控制台打印输出。
     */
    public static void limitSkipTest() {

        Stream<String> nameStream = Stream.of("陈玄风", "梅超风", "陆乘风", "曲灵风", "武眠风", "冯默风", "罗玉风");
//        nameStream.limit(2).forEach(System.out::println);
        nameStream.skip(5).forEach(System.out::println);
    }

    /*
        整数数组 1, -2, -3, 4, -5 绝对值打印
     */

    public static void foreachTest() {

        Stream.of(1, -2, -3, 4, -5).forEach(integer -> {
            System.out.println(Math.abs(integer));
        });

    }

    /*
      map
      给定一个数字列表，返回一个由每个数的平方构成的列表呢
        比如给定【1，2，3，4，5】， 应该返回【1，4，9，16，25】。
     */
    public static void mapTest() {

        System.out.println(Arrays.toString(Stream.of(1, 2, 3, 4, 5).map(integer -> Math.pow(integer, 2)).toArray()));
    }

    /*
        一组男演员，一组女演员
        男演员只要名字为3个字的前三人
        女演员只要姓林的，并且不要第一个
        把过滤后的男演员姓名和女演员姓名合并到一起
        把上一步操作后的元素作为构造方法的参数创建演员对象（实例化一个Actor类，此处尝试使用map），遍历数组

     */

    public static void a(){
        List<String> actors = Arrays.asList("刘德华", "成龙", "吴彦祖", "周润发", "周星驰", "吴京");
        List<String> actress = Arrays.asList("林心如","孙俪","柳岩","林青霞","王祖贤","张曼玉");
        Stream<String> actorsStream = actors.stream();
        Stream<String> actressStream = actress.stream();
        System.out.println("-------------------------");

        System.out.println(Arrays.toString(
                Stream.concat(actors.stream().filter(s -> s.length() == 3), actress.stream().skip(1))
                        .map((Function<String, Actor>) Actor::new).toArray()));

        System.out.println("-------------------------");
    }

    static class Actor{
        String name;

        public Actor(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return "Actor{" +
                    "name='" + name + '\'' +
                    '}';
        }
    }

}
